import axios from "axios";
import {setToken,getToken,removeToken} from "@/utils/token"
//然后通过create方法来创建一个请求服务
//然后create方法内有一些配置项，比如接口域名`baseURL`、接口请求超时时间`timeout`
// 完整url = 服务根url + 请求url拼接的； 服务根url来源于全局变量；请求url来源于api函数的url参数。
//接口url`url`
//接口请求方式`method`等等，需要我们按需传入
import {Message} from "element-ui";

//http://localhost/api/Base/getGlobalMenu，http://localhost:8080/api/Base/getGlobalMenu,http://127.0.0.1/Laravel/blog/public
const request = axios.create({
    // baseURL: process.env.VUE_APP_BASE_URL, // 完整的api地址 = 接口域名+ 接口路径
   //  baseURL:"http://localhost/Laravel/blog/public",//这里配置全局的导致vue.config的 pathRewrite:{"^/api":""},失效所以只能先去掉以后在说
   //   baseURL:"http://127.0.0.1/Laravel/blog/public",
    baseURL:"http://127.0.0.1:8888/blog/public",

     withCredentials: false, // 跨域请求时发送cookie
     // timeout: 5000, // 请求超时时间 5s，请求超时
    headers: {
         // Referer: 'http://localhost:8080', // 设置前端服务器的地址
        'Access-Control-Allow-Origin': '*',
    },

})


// /下面会定义两个拦截器，分别是 `请求拦截器`，`响应拦截器`
//`请求拦截器`是前端请求后端接口前处理的一些逻辑，比如开启loading，配置header请求头等等
//`响应拦截器`就是后端响应我们前端，返回回来的数据，比如我们可以在这响应拦截器内拿到status Code
//拿到后端接口返回的code，关闭loading、根据code码处理一些详细的逻辑等等一系列操作
//request interceptor   请求拦截器

request.interceptors.request.use(
    config => {
        // do something before request is sent。在发送请求之前做一些事情
        // 请求之前的设置
        // 添加请求头信息，可以根据需要自行选择，也可以不要
        // 例如请求头加入“tken”键
        // config.headers['token'] = "xxxxxx"

        // 增加token
        let userinfo =  getToken('token');
            // localStorage.getItem('token');
        // console.log("user",userinfo);
        if (userinfo) {
            let token = JSON.parse(userinfo);
            // 注意：token前边有 'Bearer ' 的信息前缀,API接口需求，Bearer后边有空格
            config.headers.Authorization = 'Bearer ' + token
        }

        // console.log('config',config);
        return config
    },
    error => {
        // do something with request error// 请求错误时
        // console.log(error) // for debug
        return Promise.reject(error)
    }
)



// response interceptor  响应拦截器
request.interceptors.response.use(
    response => {
        const res = response.data
        // console.log(response);
        // if the custom code is not 20000, it is judged as an error.// 在这里限定了返回的必须要有返回码——code键，且返回码不为200时视为请求结果错误的
        // 这里我又加了其他判断
        let code = [400,401,402,403,422];
        // if (res.code !== 200) {
        if (code.indexOf(res.code) !== -1) {

            // 这是错误信息提示
            // 如果返回值有键-message，则错误信息是自定义的返回信息值，否则只提示'Error'
            //alert(res.message || 'Error')
            // console.error('request',res.message || 'Error')
            // 你也可以加入其它一些返回码的判断，也可以根据某些返回码跳转到某些页面
            // return Promise.reject(new Error(res.message || 'Error'))

            // Message({type:'error', message:res.message || 'Error'});
            // 使用route,导致页面白屏问题没有解决
            //  router.push({name:'login'}).catch(err => { return err })
            //  window.location.href = "/login";
            return res;
        } else {
            return res
        }
    },
    error => {
        // console.log('err' + error) // for debug
        // alert(error.message || 'Error')
        // console.error('request',error.message || 'Error')
        return Promise.reject(error)
    }
)


// 最后暴露我们声明的 service 服务
export default request;